﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;

namespace GUI
{
    public partial class FrmArbejdslogMenu : Form
    {
        // Atributter
        private LogSystem system;
        
        // Konstruktør
        public FrmArbejdslogMenu()
        {
            InitializeComponent();

            system = new LogSystem();
        }

        // Form-load hændelsen
        private void ArbejdslogMenu_Load(object sender, EventArgs e)
        {
            NormalTilstand();

            lblStatusVis_Menu.ForeColor = Color.Green;
            lblStatusVis_Menu.Text = "Klar.";

            clbMedarbejderUpdate();            
            CboProjektUpdate();
        }

        #region Tilstandsstyrring

        // Betingelser for normal-tilstand
        private void NormalTilstand()
        {
            cboProjekt_Menu.Enabled = false;
            btnOpretArbejdslog_Menu.Visible = true;            
            btnFortryd_Menu.Visible = false;
            btnStartLog_Menu.Visible = false;
            btnNoter_Menu.Visible = true;
            btnAfslut_Menu.Visible = true;

            cboProjekt_Menu.SelectedItem = null;
            clbMedarbejdere_Menu.ClearSelected();
            clbMedarbejdere_Menu.Enabled = false;            
            
            lblStatusVis_Menu.ForeColor = Color.Green;
            lblStatusVis_Menu.Text = "Klar.";
        }

        // Betingelser for opret-tilstand
        private void OpretTilstand()
        {
            cboProjekt_Menu.Enabled = true;            
            btnOpretArbejdslog_Menu.Visible = false;            
            btnFortryd_Menu.Visible = true;
            btnStartLog_Menu.Visible = true;
            btnNoter_Menu.Visible = false;
            btnAfslut_Menu.Visible = false;

            cboProjekt_Menu.SelectedItem = null;
            clbMedarbejdere_Menu.Enabled = true;
                        
            lblStatusVis_Menu.ForeColor = Color.Green;
            lblStatusVis_Menu.Text = "Du kan nu oprette en arbejdslog";
        }

        
        #endregion

        #region Update-metoder

        // Metode til at indlæse projekter i combobox
        private void CboProjektUpdate()
        {
            cboProjekt_Menu.Items.Clear();

            IProjektdata iProdata;
            IEnumerator iProjektIterator = system.GetProjekter();
            iProjektIterator.Reset();

            while (iProjektIterator.MoveNext())
            {
                iProdata = (IProjektdata)iProjektIterator.Current;

                cboProjekt_Menu.Items.Add(iProdata.Titel.ToString());
            }
            
        }        

        // metode til at indlæse medarbejdere i check-list-box
        public void clbMedarbejderUpdate()
        {
            IMedarbejderdata iMedarbdata;
            IEnumerator iMedarbejderIterator = system.GetMedarbejdere();
            iMedarbejderIterator.Reset();

            while (iMedarbejderIterator.MoveNext())
            {
                iMedarbdata = (IMedarbejderdata)iMedarbejderIterator.Current;

                clbMedarbejdere_Menu.Items.Add(iMedarbdata.Navn);
            }
        }

       

        #endregion

        #region Knapper og clicks

        // Opret arbejdslog-knappen
        private void btnOpretArbejdslog_Menu_Click(object sender, EventArgs e)
        {
            OpretTilstand();
        }

        // Fortryd-knappen
        private void btnFortryd_Menu_Click(object sender, EventArgs e)
        {
            cboProjekt_Menu.SelectedItem = null;

            NormalTilstand();
        }

        // Start log-knappen
        private void btnStartLog_Menu_Click(object sender, EventArgs e)
        {
            int arbejdslogID;
            DateTime starttidspunkt = DateTime.Now;
            DateTime sluttidspunkt = DateTime.Now;
            int tid = 0; // Minutter
            string note = "";
            bool aktiv = true;
            List<int> medarbejdernumre = new List<int>();
            string projektTitel;
            int projektNr;
            medarbejdernumre.Clear(); // ryder listen så den er klar til næste tryk på knappen

            //læser projektNr fra drop down boksen            
            if (cboProjekt_Menu.SelectedItem == null)
            {
                MessageBox.Show("Vælg venligst et projekt at arbejde på");
                return;
            }

            projektTitel = cboProjekt_Menu.SelectedItem.ToString();
            projektNr = system.FindprojektNrUdFraNavn(projektTitel);

            //læser hvilke medarbejdere der er "checked" og tilføjer deres medarbejdernumre til listen
            foreach (string i in clbMedarbejdere_Menu.CheckedItems)
            {
                string navn = i;
                int medarbNr = system.FindMedarbNrUdFraNavn(navn);
                medarbejdernumre.Add(medarbNr);
            }
            if (medarbejdernumre.Count == 0)
            {
                MessageBox.Show("Vælg venlist en eller flere medarbejdere der skal arbejde på projektet");
                return;
            }

            if (MessageBox.Show("Vil du starte loggen med det valgt projekt og de valgte medarbejdere?", "Du er nu ved at starte loggen", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                try
                {
                    bool res;

                    //opretter arbejdsloggen og associere et projekt
                    system.OpretArbejdslogMedProjekt(starttidspunkt, sluttidspunkt, tid, note, aktiv, projektNr, out arbejdslogID);

                    //associere de valgte medarbejdere til arbejdsloggen
                    foreach (int medarbNr in medarbejdernumre)
                    {
                        res = system.OpretArbejdslogMedarbejder(medarbNr, arbejdslogID);
                    }

                    // Gå herefter til loggen
                    FrmKlient frmKlient = new FrmKlient(projektTitel, arbejdslogID);
                    this.Hide();
                    frmKlient.ShowDialog();
                    this.Show();
                }

                catch (Exception)
                {

                    MessageBox.Show("loggen kunne ikke startes pga en systemfejl");
                }
                
            }

            NormalTilstand();
        }

        // Opret/Vis noter-knappen
        private void btnNoter_Menu_Click(object sender, EventArgs e)
        {
            // Gå til arbejdslogs
            FrmArbejdslogs frmArbejdslogs = new FrmArbejdslogs();
            this.Hide();
            frmArbejdslogs.ShowDialog();
            this.Show();
        }        

        // Afslut-knappen
        private void btnAfslut_Menu_Click(object sender, EventArgs e)
        {
            if(MessageBox.Show("Har du husket at tilføje noter til dagens arbejdslogs? Vil du afslutte programmet?", "Advarsel, vil du lukke programmet?", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                this.Close();
            }
        }

        #endregion
    }
}
